package com.sh.configs;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;


// 使用@Configuration注解，表示这是一个配置类，用于定义Spring容器中的bean
@Configuration
// 使用@PropertySource注解，指定配置文件的位置，这里使用的是classpath下的smtp.properties文件
//@PropertySource("classpath:smtp.properties")
public class EmailConfig {

    // 使用@Bean注解，表示这个方法将返回一个对象，该对象将被注册为Spring容器中的一个bean
    @Bean
    public JavaMailSender mailSender(
            // 使用@Value注解，从配置文件中读取相应的属性值并注入到方法参数中
            @Value("${spring.mail.host}") String host,
            @Value("${spring.mail.port}") int port,
            @Value("${spring.mail.username}") String user,
            @Value("${spring.mail.password}") String password,
            @Value("${spring.mail.auth}") boolean auth,
            @Value("${spring.mail.from}") String from
    ) {
        // 创建一个JavaMailSenderImpl实例
        /**
         *  JavaMailSenderImpl 是 Spring 框架中用于发送电子邮件的类。
         *  它实现了 JavaMailSender 接口，提供了一种简化的邮件发送方法
         */
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        // 设置邮件服务器的主机名
        mailSender.setHost(host);
        // 设置邮件服务器的端口号
        mailSender.setPort(port);
        // 设置邮件服务器的用户名
        mailSender.setUsername(user);
        // 设置邮件服务器的密码
        mailSender.setPassword(password);
        // 获取JavaMail的属性对象
        Properties p = mailSender.getJavaMailProperties();
        // 设置是否需要身份验证
        p.put("mail.smtp.auth", auth);
        // 如果端口是587，启用TLS加密
        if (port == 587) {
            p.put("mail.smtp.starttls.enable", true);
        }
        // 如果端口是465，设置SSL套接字工厂的相关属性
        if (port == 465) {
            p.put("mail.smtp.socketFactory.port", "465");
            p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            p.put("mail.smtp.ssl.protocols", "TLSv1.2");
        }
        // 返回配置好的JavaMailSender实例
        return mailSender;
    }
}


